<?php
/*
  Released under the GNU General Public License

  Denne applikasjonen er oprinnelig portert fra oscommerce av
  Ingvald Haaland - ingvald@haaland.net

  Senere omskrevet og forbedret av Rune Rasmussen - http://www.syntaxerror.no
  Bl.a. for å gi fraktberegning også for brukere som ikke er innlogget,
  eller ikke har oppgitt postnummer. Samt forbedret fraktberegning, lagt inn oversettelse m.m.
  
  Senere omskrevet av Arne Unneland (http://www.unneland.com) til å bruke Bring Fraktguide (http://fraktguide.bring.no) i februar 2009. 
  - Modulen benytter Bring Fraktguide XML API. Dette er gratis og krever ikke registrering, men forutsetter aksept av bruksvilkår som er tilgjengelig på http://fraktguide.bring.no/. De som bruker denne modulen anbefales å registrere seg på Bring Fraktguide da kun registrerte brukere får beskjed om endringer i underliggende tjenester. Anbefaler også å lese informasjon om XML API da det er noen forutsetninger for de prisene som presenteres. Bla. må pakkene være forhåndsmeldt m/EDI.
  - Denne modulen er et privat initativ og på ingen måte er et Bring eller Posten produkt. Modulen brukes på eget ansvar og dersom man finner feil er det bare å fikse + melde tilbake til forumet på Zen Cart Norge :-)
  - Modulen leverer fraktkostnad for angitt produkt, samt produkttekster, hjelpetekster og transporttid. Noe av dette vises i den enkelte fraktmodul og kan tilpasses til den enkeltes behov.
  - Merk at det er gjort forenklinger i Zen Cart rundt fraktberegning. Det. er bla. kun fysisk vekt på pakkene, mens mange pakker prises etter fraktberegnet vekt (volum). Dette bør man ta hensyn til når man setter opp vekten på varene sine.
 
  Tips til forbedringer av denne modulen ligger i bring_fraktguide_common/bring_fraktguide_common.php

*/

include_once 'bring_fraktguide_common/bring_fraktguide_common.php';

class bringservicepakke {
    var $code, $title, $description, $icon, $enabled, $weightMassType;

	// class constructor
    function bringservicepakke() {
		global $order, $db;
		$this->code = 'bringservicepakke';
		$this->title = MODULE_SHIPPING_BRING_SERVICEPAKKE_TEXT_TITLE;
		$this->description = MODULE_SHIPPING_BRING_SERVICEPAKKE_TEXT_DESCRIPTION;
		$this->icon = DIR_WS_TEMPLATES . 'template_default/images/icons/shipping_posten_ny.gif';
		$this->tax_class = MODULE_SHIPPING_BRING_SERVICEPAKKE_TAX_CLASS;
		$this->tax_basis = MODULE_SHIPPING_BRING_SERVICEPAKKE_TAX_BASIS;
		$this->sort_order = MODULE_SHIPPING_BRING_SERVICEPAKKE_SORT_ORDER;
		$this->weightMassType = MODULE_SHIPPING_BRING_SERVICEPAKKE_WEIGHTMASSTYPE;
		$this->postingAtPostoffice = MODULE_SHIPPING_BRING_SERVICEPAKKE_POSTINGATPOSTOFFICE;


		if (zen_get_shipping_enabled($this->code)) {
		  $this->enabled = ((MODULE_SHIPPING_BRING_SERVICEPAKKE_STATUS == 'True') ? true : false);
		}
		if ( ($this->enabled == true) && (((int)MODULE_SHIPPING_BRING_SERVICEPAKKE_ZONE > 0) or ((int)MODULE_SHIPPING_BRING_SERVICEPAKKE_ZONE2 > 0)) ) {
			$check_flag = false;
			$check = $db->Execute("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where ((geo_zone_id = '" . MODULE_SHIPPING_BRING_SERVICEPAKKE_ZONE . "') or (geo_zone_id = '" . MODULE_SHIPPING_BRING_SERVICEPAKKE_ZONE2 . "')) and zone_country_id = '" . $order->delivery['country']['id'] . "' order by zone_id");
			while (!$check->EOF) {
				if ($check->fields['zone_id'] < 1) {
					$check_flag = true;
					break;
				} elseif ($check->fields['zone_id'] == $order->delivery['zone_id']) {
					$check_flag = true;
					break;
				}
				$check->MoveNext();
			}

			if ($check_flag == false) {
				$this->enabled = false;
			}
	    }
	}

	// class methods
    function quote($method = '') {

		global $addressvalues, $shipping_weight, $order, $shipping_num_boxes, $db;
		$fra_nr = SHIPPING_ORIGIN_ZIP;

		if ($order->delivery['postcode'] > 0 ) {
			$til_nr = $order->delivery['postcode'];
		} else {
			$til_nr = $fra_nr;
		}

		$productCode = "SERVICEPAKKE";
		//Ved behov for feilsøking kan påfølgende 2 linjer aktiveres ved å fjerne //
		//$totalvekt=$shipping_weight*$shipping_num_boxes; //gang kollivekt med antall kolli
		//echo "Feilsøking! Ant. kolli: " . $shipping_num_boxes . "; Vekt pr. kolli: " . $shipping_weight . "; Totalvekt: " . $totalvekt;
		$fraktArray = getValuesForProduct($productCode, $fra_nr, $til_nr, $shipping_weight, $shipping_num_boxes, $this->weightMassType, $this->postingAtPostoffice); //se bring_fraktguide_common.php for detaljer og forutsetninger
		$this->quotes = getQuoteForFraktArray($productCode, $fraktArray, $this->code, MODULE_SHIPPING_BRING_SERVICEPAKKE_FEETYPE, MODULE_SHIPPING_BRING_SERVICEPAKKE_FEEVALUE, MODULE_SHIPPING_BRING_SERVICEPAKKE_TEXT_TITLE);
		if ($fraktArray != null) {
			if ($this->tax_class > 0) {
				$this->quotes['tax'] = zen_get_tax_rate($this->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id']);
			}
			if (zen_not_null($this->icon)) $this->quotes['icon'] = zen_image($this->icon, $this->title);
		}
		return $this->quotes;
    }

    function check() {
		global $db;
		if (!isset($this->_check)) {
			$check_query = $db->Execute("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_SHIPPING_BRING_SERVICEPAKKE_STATUS'");
			$this->_check = $check_query->RecordCount();
		}
		return $this->_check;
    }

    function install() {
        global $db;
     	$db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Aktivere', 'MODULE_SHIPPING_BRING_SERVICEPAKKE_STATUS', 'True', 'Vil du tilby sending med denne fraktmetoden?', '6', '0', 'zen_cfg_select_option(array(\'True\', \'False\'), ', now())");
     	$db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Prisp&aring;slag - Prosent, bel&oslash;p eller ingen?', 'MODULE_SHIPPING_BRING_SERVICEPAKKE_FEETYPE', 'None', 'Angis et eventuelt prisp&aring;slaget i prosent eller bel&oslash;p?<br />Percent = P&aring;slag i prosent (eks. +5%)<br />Amount = P&aring;slag i bel&oslash;p (eks. +5 NOK)<br />None = Ingen p&aring;slag', '6', '0', 'zen_cfg_select_option(array(\'Percent\', \'Amount\', \'None\'), ', now())");
     	$db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Prisp&aring;slag - Verdi', 'MODULE_SHIPPING_BRING_SERVICEPAKKE_FEEVALUE', '0', 'Prisp&aring;slag for dette fraktvalget. Verdi angitt her legges til p&aring; pris fra Fraktguiden.<br />Om p&aring;slag i prosent er valgt angis verdien f.eks. som 1.05 for 5% p&aring;slag. Om p&aring;slag i bel&oslash;p er valg angis bel&oslash;pet i valuta (f.eks. 5 for Kr. 5,- i p&aring;slag). P&aring;slag gj&oslash;res p&aring; bel&oslash;p eksl. mva.', '6', '0', now())");
     	$db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Avgiftsklasse', 'MODULE_SHIPPING_BRING_SERVICEPAKKE_TAX_CLASS', '0', 'Bruk f&oslash;lgende avgiftsklasse p&aring; fraktpris.', '6', '0', 'zen_get_tax_class_title' , 'zen_cfg_pull_down_tax_classes(', now())");
     	$db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Avgiftsgrunnlag', 'MODULE_SHIPPING_BRING_SERVICEPAKKE_TAX_BASIS', 'Shipping', 'P&aring; hvilket grunnlag blir fraktavgift beregnet. Valgene er<br />Sending - Basert p&aring; kundes leveringsadresse<br />Betaling - Basert p&aring; kundes fakturaadresse<br />Butikk - Basert p&aring; butikkadresse om faktura-/sendingssone tilsvarer butikksone', '6', '0', 'zen_cfg_select_option(array(\'Shipping\', \'Billing\', \'Store\'), ', now())");
     	$db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Produktvekt', 'MODULE_SHIPPING_BRING_SERVICEPAKKE_WEIGHTMASSTYPE', 'Kilo', 'Er produktvekt oppgitt i kilo eller gram?', '6', '0', 'zen_cfg_select_option(array(\'Kilo\', \'Gram\'), ', now())");
     	$db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Leveringssone', 'MODULE_SHIPPING_BRING_SERVICEPAKKE_ZONE', '0', 'Om en soner er valgt vil fraktvalget bare v&aelig;re tilgjengelig for denne sonen, samt en eventuell leveringssone 2 valgt nedenfor.', '6', '0', 'zen_get_zone_class_title', 'zen_cfg_pull_down_zone_classes(', now())");
     	$db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Leveringssone 2', 'MODULE_SHIPPING_BRING_SERVICEPAKKE_ZONE2', '0', 'Om du &oslash;nsker &aring; tilby levering til en ekstre sone kan det velges her, f.eks for levering til Svalbard og Jan Mayen.', '6', '0', 'zen_get_zone_class_title', 'zen_cfg_pull_down_zone_classes(', now())");
     	$db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sortering', 'MODULE_SHIPPING_BRING_SERVICEPAKKE_SORT_ORDER', '150', 'Sorteringsrekkef&oslash;lge ved visning.', '6', '0', now())");
     	$db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Feilh&aring;ndtering - Standard pris', 'MODULE_SHIPPING_BRING_SERVICEPAKKE_ERRORCOST', '180', 'Angi en standard pris (eksl. mva) som skal benyttes per kolli i tilfelle fraktguiden ikke kan kontaktes for prisuttrekk.', '6', '0', now())");
     	$db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Leveres via postkontor', 'MODULE_SHIPPING_BRING_SERVICEPAKKE_POSTINGATPOSTOFFICE', 'False', 'Leveres pakken til Bring via postkontor (ikke henteavtale)', '6', '0', 'zen_cfg_select_option(array(\'True\', \'False\'), ', now())");
    }

    function remove() {
		global $db;
		$db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key ='MODULE_SHIPPING_BRING_SERVICEPAKKE_STATUS'");
		$db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key ='MODULE_SHIPPING_BRING_SERVICEPAKKE_FEETYPE'");
		$db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key ='MODULE_SHIPPING_BRING_SERVICEPAKKE_FEEVALUE'");
		$db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key ='MODULE_SHIPPING_BRING_SERVICEPAKKE_TAX_CLASS'");
		$db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key ='MODULE_SHIPPING_BRING_SERVICEPAKKE_TAX_BASIS'");
		$db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key ='MODULE_SHIPPING_BRING_SERVICEPAKKE_WEIGHTMASSTYPE'");
		$db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key ='MODULE_SHIPPING_BRING_SERVICEPAKKE_ZONE'");
		$db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key ='MODULE_SHIPPING_BRING_SERVICEPAKKE_ZONE2'");
		$db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key ='MODULE_SHIPPING_BRING_SERVICEPAKKE_SORT_ORDER'");
		$db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key ='MODULE_SHIPPING_BRING_SERVICEPAKKE_POSTINGATPOSTOFFICE'");
		$db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key ='MODULE_SHIPPING_BRING_SERVICEPAKKE_ERRORCOST'");
}

    function keys() {
    	return array('MODULE_SHIPPING_BRING_SERVICEPAKKE_STATUS', 'MODULE_SHIPPING_BRING_SERVICEPAKKE_FEETYPE', 'MODULE_SHIPPING_BRING_SERVICEPAKKE_FEEVALUE', 'SHIPPING_ORIGIN_ZIP', 'MODULE_SHIPPING_BRING_SERVICEPAKKE_WEIGHTMASSTYPE', 'MODULE_SHIPPING_BRING_SERVICEPAKKE_TAX_CLASS', 'MODULE_SHIPPING_BRING_SERVICEPAKKE_TAX_BASIS', 'MODULE_SHIPPING_BRING_SERVICEPAKKE_ZONE', 'MODULE_SHIPPING_BRING_SERVICEPAKKE_ZONE2', 'MODULE_SHIPPING_BRING_SERVICEPAKKE_POSTINGATPOSTOFFICE', 'MODULE_SHIPPING_BRING_SERVICEPAKKE_ERRORCOST', 'MODULE_SHIPPING_BRING_SERVICEPAKKE_SORT_ORDER');
    }
}
